Flash memory devices have developed into a popular source of non-volatile memory for a wide range of electronic applications. Flash memory devices typically use a one-transistor memory cell that allows for high memory densities, high reliability, and low power consumption. Common uses for flash memory include personal computers, flash drives, digital cameras, and cellular telephones. Program code and system data such as a basic input/output system (BIOS) are typically stored in flash memory devices for use in personal computer systems.
A typical flash memory device is a type of memory in which the array of memory cells is typically organized into memory blocks that can be erased on a block-by-block basis (and reprogrammed on a page-by-page basis). Changes in a threshold voltage of each of the memory cells, through erasing or programming of a charge storage structure (e.g., floating gate or charge trap) or other physical phenomena (e.g., phase change or polarization), determine the data value programmed into each cell. The data in a cell of this type is determined by the presence or absence of the charge in the charge storage structure.
A programming operation typically comprises a series of incrementally increasing programming pulses that are applied to a control gate of a memory cell being programmed in order to increase that particular memory cell's threshold voltage. Each memory cell can be programmed as single level cell (SLC) memory or multiple level cell (MLC) memory where the cell's threshold voltage (Vt) is indicative of the data value programmed into that cell. For example, in an SLC memory, a Vt of 2.5V might indicate a programmed cell while a Vt of −0.5V might indicate an erased cell. An MLC memory uses multiple Vt ranges that each indicates a different state. Multilevel cells can take advantage of the analog nature of a traditional flash cell by assigning a bit pattern to a specific Vt range. This technology permits the storage of data values representing two or more bits per cell, depending on the quantity of Vt ranges assigned to the cell.
During programming of a block of memory cells, a fixed cache of memory cells is typically used to temporarily store data that is to be programmed into the block of memory cells. For example, in an MLC memory device, a fixed size SLC cache can be used to store data for programming into an MLC block of memory cells. This can improve memory reliability. The memory performance is also improved prior to the cache becoming near full, at that point part of the cache must be moved to MLC blocks to create more room in the cache, and the performance advantage of the cache will be diminished. The performance improvement is function of the size of the cache but has the drawback of reducing user capacity since a fixed portion of the memory is used as a SLC cache and cannot be used to store user data with the same efficiency as MLC.
For the reasons stated above and for other reasons that will become apparent to those skilled in the art upon reading and understanding the present specification, there is a need in the art for a more efficient way to temporarily store data during programming.